import re

common_used_numerals ={'零':0, '一':1, '二':2, '两':2, '三':3, '四':4, '五':5, '六':6, '七':7, '八':8, '九':9, '十':10, '百':100, '千':1000}
common_used_numerals_cn ={'零':0, '一':1, '二':2, '两':2, '三':3, '四':4, '五':5, '六':6, '七':7, '八':8, '九':9, '十':10, '百':100, '千':1000,
                          "万":10000, "亿":100000000}
def chinese2digits(uchars_chinese):
  total = 0
  r = 1              #表示单位：个十百千...
  for i in range(len(uchars_chinese) - 1, -1, -1):
    val = common_used_numerals.get(uchars_chinese[i])
    if val >= 10 and i == 0:  #应对 十三 十四 十*之类
      if val > r:
        r = val
        total = total + val
      else:
        r = r * val
        #total =total + r * x
    elif val >= 10:
      if val > r:
        r = val
      else:
        r = r * val
    else:
      total = total + r * val
  return str(total)


def an2cn(words):
    nums = chinese2digits(words)
    return str(nums)

def an2cn_2(words):
    str1 = ""
    for i in range(len(words)):
        str1 += str(common_used_numerals.get(words[i]))
    return str1

'''
1: 我想知道有多少家公司的市值低于一百亿元?   ->   我想知道有多少家公司的市值低于100亿元？
2: 哪些楼盘平均售价低于2万或者容积率小于2   ->   哪些楼盘平均售价低于20000或者容积率小于2
3: 预计在2011年，还有2012年每股的盈余都在1以上的公司有多少个   ->   预计在2011年，还有2012年每股的盈余都在1以上的公司有多少个
4: 有多少家企业11年和12年预计每股税后利润都高于1   ->   有多少家企业2011年和2012年预计每股税后利润都高于1
5: 你好啊，你帮我算一下到底有多少家公司一六年定向增发新股，并且是为了融资收购其他资产的呀   ->   你好啊，你帮我算一下到底有多少家公司2016年定向增发新股，并且是为了融资收购其他资产的呀
6: 请问一下啊哪个公司2019年1月7号到13号的周票房超过1000万的   ->   请问一下啊哪个公司2019/1/7到13号的周票房超过1000万的
7: 我想问一下市值超100亿的股票的19E每股收益和本益比分别是多少   ->   我想问一下市值超100亿的股票的19E每股收益和本益比分别是多少
8: 二零一九年第四周大黄蜂和密室逃生这两部影片的票房总占比是多少呀   ->   2019年第四周大黄蜂和密室逃生这两部影片的票房总占比是多少呀
3(~): 预计在11年，还有2012年每股的盈余都在1以上的公司有多少个   ->   预计在2011年，还有2012年每股的盈余都在1以上的公司有多少个
5-6(~): 预计在一一年，还有2012年每股的盈余都在1以上的公司有多少个   ->   预计在2011年，还有2012年每股的盈余都在1以上的公司有多少个
'''
pattern_1 = r"(?P<num>[零一二三四五六七八九十百千]+)(?P<unit>[万|亿|百亿|千亿|万亿])"  # 五百万 -- 500万
pattern_2 = r"(?P<word>\D)(?P<num>[0123456789])(?P<unit>[万])"  # 5万  --- 50000  万前面为单数个数字
pattern_3 = r"[1|2][0-9][123456789]{2}[年]\D"  # 2016年  --- 2016年
pattern_4 = r"(?P<word>\D)(?P<year>[1][0-9])[年]"        # 16年  --- 2016     # 要防止和2016年冲突
pattern_5 = r"(^[一二三四五六七八九])(?P<year>[一二三四五六七八九]{2})[年]"  # "一六年" --- 2016   要防止和二零一六年冲突
pattern_6 = r"(?P<year>\d+)年(?P<month>\d+)月(?P<day>\d+)[日|号]" # 2018年12月2号 -- 2018/12/2
pattern_7 = r"(?P<num>[0123456789]{2,})(?P<unit>[万|百万|千万|亿|百亿|千亿|万亿])"  # 50万  --- 50万  5千万 -> 5千万 万前面为双数个数字
pattern_8 = r"(?P<num>[零一二三四五六七八九]+)[年]"  # 二零一九年  ->   2019年

def parse1(matched):
    num = matched.group('num')  # 五百
    unit = matched.group('unit') # 万|亿|百亿|千亿|万亿
    num = an2cn(num)  # 五百 -> 500
    return num + unit

def parse2(matched):
    word = matched.group('word')
    num = matched.group('num')
    unit = matched.group('unit')
    # print(num)
    return word + num + str(common_used_numerals_cn[unit])[1:]

def parse4(matched):
    # 防止2011年这种情况被解析为202011年
    word = matched.group('word')
    year = matched.group('year')
    # print(word)
    # print(year)
    if word:
        return word + "20" + year + '年'
    else:
        return "20" + year + '年'

def parse5(matched):
    year = matched.group('year')
    return "20" + an2cn_2(year) + '年'

def parse6(matched):
    year = matched.group('year')
    month = matched.group('month')
    day = matched.group('day')
    return year + '/' + month + '/' + day

def parse7(matched):
    num = matched.group('num')
    unit = matched.group('unit')
    return num + unit

def parse8(matched):
    num = matched.group('num')  # 二零一九年
    # print(num)
    num = an2cn_2(num)  # 二零一九 -> 2019
    return num + "年"

def deal_with_data(s):
    if re.search(pattern_1, s):
        s = re.sub(pattern_1, parse1, s)
        # print("1")
        return s
    elif re.search(pattern_2, s):
        s = re.sub(pattern_2, parse2, s)
        # print("2")
        return s
    elif re.search(pattern_4, s):
        s = re.sub(pattern_4, parse4, s)  # 你好，请跟我说一下一六年和11年福州土地供应面积分别是多少谢谢 -> 你好，请跟我说一下2016年和2011年福州土地供应面积分别是多少谢谢
        s = re.sub(pattern_5, parse5, s)
        # print("4")
        return s
    elif re.search(pattern_5, s):
        s = re.sub(pattern_5, parse5, s)
        s = re.sub(pattern_4, parse4, s)
        # print("5")
        return s
    elif re.search(pattern_6, s):
        # print("6")
        s = re.sub(pattern_6, parse6, s)
        return s
    elif re.search(pattern_7, s):
        # print("7")
        s = re.sub(pattern_7, parse7, s)
        return s
    elif re.search(pattern_8, s):
        s = re.sub(pattern_8, parse8, s)
        return s
    else:
        # print("3")
        return s
# s = "哪些楼盘平均售价低于2万或者容积率小于2"
# print(deal_with_data(s))

s = "15年定增的，增发价格又低于30的都是哪些证券啊"
print(deal_with_data(s))







'''
1: 我想知道有多少家公司的市值低于一百亿元?   ->   我想知道有多少家公司的市值低于100亿元？
2: 哪些楼盘平均售价低于2万或者容积率小于2   ->   哪些楼盘平均售价低于20000或者容积率小于2
3: 我想问一下市值超100万的股票的19E每股收益和本益比分别是多少   ->   我想问一下市值超100万的股票的19E每股收益和本益比分别是多少
4: 预计在2011年，还有2012年每股的盈余都在1以上的公司有多少个   ->   预计在2011年，还有2012年每股的盈余都在1以上的公司有多少个
5: 有多少家企业11年和12年预计每股税后利润都高于1   ->   有多少家企业2011年和2012年预计每股税后利润都高于1
6: 你好啊，你帮我算一下到底有多少家公司一六年定向增发新股，并且是为了融资收购其他资产的呀   
->   你好啊，你帮我算一下到底有多少家公司2016年定向增发新股，并且是为了融资收购其他资产的呀
7: 二零一九年第四周大黄蜂和密室逃生这两部影片的票房总占比是多少呀   ->   2019年第四周大黄蜂和密室逃生这两部影片的票房总占比是多少呀
8: 请问一下啊哪个公司2019年1月7号到13号的周票房超过1000万的   ->   请问一下啊哪个公司2019/1/7到13号的周票房超过1000万的
'''









